import type {
    DialogProps,
    DrawerProps,
    FormProps,
    FormItemRule,
} from 'element-plus'
// 对象类型
export type IObject = Record<string, any>
// dialog组件属性
export type IDialog = Partial<Omit<DialogProps, 'modelValue'>>

// drawer组件属性
export type IDrawer = Partial<Omit<DrawerProps, 'modelValue'>>

// form组件属性
export type IForm = Partial<Omit<FormProps, 'model' | 'rules'>>
// 表单项
export type IFormItems<T = any> = Array<{
    // 组件类型(如input,select,radio,custom等，默认input)
    type?:
        | 'input'
        | 'select'
        | 'radio'
        | 'checkbox'
        | 'tree-select'
        | 'date-picker'
        | 'input-number'
        | 'custom'
    // 组件属性
    attrs?: IObject
    // 组件可选项(适用于select,radio,checkbox组件)
    options?: Array<{
        label: string
        value: any
        disabled?: boolean
        [key: string]: any
    }>
    // 插槽名(适用于组件类型为custom)
    slotName?: string
    // 标签文本
    label: string
    // 标签提示
    tips?: string
    // 键名
    prop: string
    // 验证规则
    rules?: FormItemRule[]
    // 初始值
    initialValue?: any
    // 是否隐藏
    hidden?: boolean
    // 监听函数
    watch?: (newValue: any, oldValue: any, data: T) => void
    // 计算属性函数
    computed?: (data: T) => any
    // 监听收集函数
    watchEffect?: (data: T) => void
}>
// 定义接收的属性
export interface IModalConfig<T = any> {
    // 页面名称
    pageName?: string
    // 主键名(主要用于编辑数据,默认为id)
    pk?: string
    // 组件类型
    component?: 'dialog' | 'drawer'
    // dialog组件属性
    dialog?: IDialog
    // drawer组件属性
    drawer?: IDrawer
    // form组件属性
    form?: IForm
    // 表单项
    formItems: IFormItems<T>
    // 提交之前处理
    beforeSubmit?: (data: T) => void
    // 提交的网络请求函数(需返回promise)
    formAction: (data: T) => Promise<any>
}
